﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
using DllDeezerDev;

namespace DllDezzerDev
{
    public class LastFmApi
    {
        #region Champs
        private static string url_getArtistEvents = "http://ws.audioscrobbler.com/2.0/?method=artist.getevents&artist=#idArtist#&api_key=057bdc578445cc51f206a20d3f5fa1d4";
        private static string url_getGeoEvents = "http://ws.audioscrobbler.com/2.0/?method=geo.getevents&location=#location#&api_key=057bdc578445cc51f206a20d3f5fa1d4";
        #endregion

        #region Methode

        public static List<Event> getArtistEvents(string artistName)
        {
            
            List<Event> lesEvents = new List<Event>();
            string url_getArtistEventsTrue = url_getArtistEvents.Replace("#idArtist#", artistName);
            XDocument xTest = XDocument.Load(url_getArtistEventsTrue);
            XElement xEvents = xTest.Element("lfm").Element("events");
            IEnumerable<XElement> xLesEvents = xEvents.Elements();

            foreach (XElement xUnEvent in xLesEvents)
            {   
                List<Artist> lesArtistes = new List<Artist>();
                XElement xArtist = xUnEvent.Element("artists");
                IEnumerable<XElement> xLesArtistes = xArtist.Elements("artist");
                foreach (XElement xunArtiste in xLesArtistes)
                {
                    Artist unArtist = new Artist(xunArtiste.Value);
                    lesArtistes.Add(unArtist);
                }

                XElement xVenue = xUnEvent.Element("venue");
                XElement xLocalisation = xVenue.Element("location");
                XElement xGeo = xLocalisation.Elements().ElementAt(4);
                IEnumerable<XElement> xLesGeo = xGeo.Elements();
                string latitude = xLesGeo.ElementAt(0).Value;
                string longitude = xLesGeo.ElementAt(1).Value;
                Localisation uneLocation = new Localisation(xLocalisation.Element("city").Value, xLocalisation.Element("country").Value, xLocalisation.Element("street").Value, xLocalisation.Element("postalcode").Value, latitude, longitude);
                //Création de la Venue
                Venue uneVenue = new Venue(xVenue.Element("id").Value, xVenue.Element("name").Value, xVenue.Element("website").Value, xVenue.Element("phonenumber").Value, uneLocation);

                //Création de l'Event

                string affiche = xUnEvent.Elements("image").ElementAt(3).Value;
                Event unEvent = new Event(xUnEvent.Element("id").Value, xUnEvent.Element("title").Value, lesArtistes,uneVenue,xUnEvent.Element("startDate").Value,xUnEvent.Element("url").Value,affiche);
                lesEvents.Add(unEvent);
                
            }
            return lesEvents;
        }

        public static List<Event> getArtistGeo(string location)
        {
            
            try
            {
                List<Event> lesEvents = new List<Event>();
                string url_getGeoEventTrue = url_getGeoEvents.Replace("#location#", location);

                XDocument xTest = XDocument.Load(url_getGeoEventTrue);
                XElement xEvents = xTest.Element("lfm").Element("events");
                IEnumerable<XElement> xLesEvents = xEvents.Elements();

                foreach (XElement xUnEvent in xLesEvents)
                {
                    List<Artist> lesArtistes = new List<Artist>();
                    XElement xArtist = xUnEvent.Element("artists");
                    IEnumerable<XElement> xLesArtistes = xArtist.Elements("artist");
                    foreach (XElement xunArtiste in xLesArtistes)
                    {
                        Artist unArtist = new Artist(xunArtiste.Value);
                        lesArtistes.Add(unArtist);
                    }

                    XElement xVenue = xUnEvent.Element("venue");
                    XElement xLocalisation = xVenue.Element("location");
                    XElement xGeo = xLocalisation.Elements().ElementAt(4);
                    IEnumerable<XElement> xLesGeo = xGeo.Elements();
                    string latitude = xLesGeo.ElementAt(0).Value;
                    string longitude = xLesGeo.ElementAt(1).Value;
                    Localisation uneLocation = new Localisation(xLocalisation.Element("city").Value, xLocalisation.Element("country").Value, xLocalisation.Element("street").Value, xLocalisation.Element("postalcode").Value, latitude, longitude);
                    //Création de la Venue
                    Venue uneVenue = new Venue(xVenue.Element("id").Value, xVenue.Element("name").Value, xVenue.Element("website").Value, xVenue.Element("phonenumber").Value, uneLocation);

                    //Création de l'Event

                    string affiche = xUnEvent.Elements("image").ElementAt(3).Value;
                    Event unEvent = new Event(xUnEvent.Element("id").Value, xUnEvent.Element("title").Value, lesArtistes, uneVenue, xUnEvent.Element("startDate").Value, xUnEvent.Element("url").Value, affiche);
                    lesEvents.Add(unEvent);

                }
                return lesEvents;
            }
            catch
            {
                List<Event> listNull = new List<Event>();
                return listNull;
            }
        }


        #endregion


    }
}